package com.xbongbong.saas.model;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.pro.businessdata.pojo.dto.FormatExplainDTO;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;
import com.xbongbong.pro.formdata.pojo.dto.SaasAnalysisDataDTO;
import com.xbongbong.saas.domain.entity.WorkPlanEntity;
import com.xbongbong.saas.domain.entity.ext.WorkReportEntityExt;

import java.util.List;
import java.util.Map;

/**
 * @author long.rao
 * @version v1.0
 * @date 2019/1/24 21:35
 * @since v1.0
 */
public interface WorkReportModel extends IModel<WorkReportEntityExt> {
    /**
     * 工作报告数据插入
     * @param entity 工作报告实体
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-02-01 15:50
     */
    @Override
    Integer insert(WorkReportEntityExt entity) throws XbbException;
    /**
     * 工作报告数据更新
     * @param entity 工作报告实体
     * @author long.rao
     * @date 2019-02-01 15:50
     * @throws XbbException 异常
     * @return Integer
     */
    @Override
    Integer update(WorkReportEntityExt entity) throws XbbException;
    /**
     * 工作报告数据查询多个
     * @param param 参数
     * @author long.rao
     * @date 2019-02-01 15:50
     * @return List<WorkReportEntityExt>
     */
    @Override
    List<WorkReportEntityExt> findEntitys(Map<String, Object> param);
    /**
     * 工作报告数据查询条数
     * @param param 参数
     * @author long.rao
     * @date 2019-02-01 15:50
     * @return Integer
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);
    /**
     * 工作报告数据单条查询
     * @param key 主键ID
     * @param corpid 公司ID
     * @author long.rao
     * @date 2019-02-01 15:50
     * @return WorkReportEntityExt
     */
    WorkReportEntityExt getByKey(Long key, String corpid);
    /**
     * 工作报告数据查询
     * @param corpid 公司ID
     * @param userId 用户id
     * @param workReportDate 时间
     * @param type 日报类型
     * @author long.rao
     * @date 2019-02-01 15:50
     * @return WorkReportEntityExt
     */
    List<WorkReportEntityExt> getWorkReport(String corpid, String userId, String workReportDate, String type);

    /**
     * 批量删除
     * @author 吴峰
     * @date 2019/3/25 15:44
     * @param list 报告id
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException
     */
    Integer deleteBatch(List<Long> list, String corpid) throws XbbException;

    /**
     * 批量编辑
     */
    Integer updateBatch(List<UpdateDataEntity> updateList, String corpid) throws XbbException;

    /**
     * 单个删除
     * @param id
     * @param corpid
     * @return
     * @throws XbbException
     */
    Integer deleteByKey(Long id,String corpid) throws XbbException;

    List findEntitysWithoutSub(Map<String, Object> param);

    /**
     * 编辑时格式化解释
     *
     * @param formatExplainDTO 入参
     * @throws XbbException 异常
     * @author long.rao
     * @date 2019-02-13 20:53
     */
    void formatUpdateExplain(FormatExplainDTO formatExplainDTO) throws XbbException;

    /**
     * 获取今日计划
     * @param corpid 公司id
     * @param userId 创建人id
     * @param type 报告类型
     * @param reportDate 报告日期
     * @return
     * @author hongxiao
     * @date 2020-03-21 21:26
     */
    List<WorkPlanEntity> getThisPlansByTime(String corpid, String userId, Integer type, Integer reportDate);

    /**
     *
     * @param corpid 公司id
     * @param userId 创建人id
     * @param type 报告类型
     * @param id 报告id
     * @return
     * @author hongxiao
     * @date 2020-03-21 21:26
     */
    List<WorkPlanEntity> getNextPlansByTime(String corpid, String userId, Integer type, Long id);

    /**
     * 工作报告编辑格式化数据格式
     *
     * @param saasAnalysisDataDTO saas编辑数据
     * @param result 要返回的jsonobject
     * @throws XbbException 参数格式错误异常
     * @author long.rao
     * @date 2019-01-29 16:23
     */
    void formatData(SaasAnalysisDataDTO saasAnalysisDataDTO, JSONObject result) throws XbbException;
}
